home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / ICNDRW_1.ARJ / ICONDRAW.DOC < prev    next >
Text File  |  1991-09-01  |  60KB  |  1,227 lines

  1.           
  2.           
  3.           
  4.           
  5.           
  6.           
  7.           
  8.           
  9.           
  10.           
  11.           
  12.           
  13.           
  14.           
  15.           
  16.                  ╔═════════════════════════════════════════════╗
  17.                  ║            ICON DRAW version 1.0            ║
  18.                  ║  Copyright (c) 1991 - SofDesign Technology  ║
  19.                  ║             All Rights Reserved             ║
  20.                  ║                                             ║
  21.                  ║             SofDesign Technology            ║
  22.                  ║              58 North Dillon Dr.            ║
  23.                  ║           Titusville, PA 16354-2406         ║
  24.                  ╚═════════════════════════════════════════════╝
  25.           
  26.                               DISCLAIMER OF WARRANTY
  27.           
  28.           THIS SOFTWARE IS PROVIDED WITHOUT ANY EXPRESS OR IMPLIED
  29.           WARRANTIES WHATSOEVER.  BECAUSE OF THE DIVERSITY OF CONDITIONS
  30.           AND HARDWARE UNDER WHICH THIS SOFTWARE MAY BE USED, NO WARRANTY
  31.           OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.  THE USER IS
  32.           ADVISED TO TEST THIS SOFTWARE THOROUGHLY BEFORE RELYING ON IT. 
  33.           THE USER MUST ASSUME THE ENTIRE RISK OF USING THIS SOFTWARE.
  34.           
  35.           
  36.           This program, library and documentation were written by Thomas J.
  37.           Clancy, Jr. of SofDesign Technology.
  38.           
  39.           Turbo Pascal is a registered trademark of Borland International.
  40.           
  41.           Microsoft Windows is a registered trademark of Microsoft
  42.           Corporation.
  43.           
  44.  
  45.           
  46.           SHAREWARE NOTICE
  47.           
  48.                This software and manual are shareware and may be freely
  49.           copied and distributed, and may be used for a trial basis of only
  50.           thirty days.  If you decide that this product is worth keeping
  51.           then it must be registered to the author.  Included is an order
  52.           form which is to be filled out and returned to the author with
  53.           payment.
  54.           
  55.                If you have received this product through a User's Group,
  56.           Software Library, or SIG, and have paid a small fee, you have NOT
  57.           acquired the registration rights to this product.
  58.           
  59.                You may NOT charge any fee for this product (program or
  60.           documentation) without our written consent.
  61.           
  62.                You may NOT distribute this product (program or
  63.           documentation) in connection with any commercial venture,
  64.           product, publication, or service without our written approval.
  65.           
  66.  
  67.                                Table of Contents
  68.  
  69.           Chapter                                                  Page #
  70.  
  71.           1  INTRODUCING ICON DRAW VERSION 1.0 .........................1
  72.                 1.2 Why Use ICON DRAW? .................................1
  73.                 1.3 What You Should Find ...............................2
  74.                 1.4 What You Need in Order to Run Icon Draw ............2
  75.  
  76.           2  INSTALLING ICON DRAW ......................................3
  77.                 2.1 Hard Drive Owners ..................................3
  78.                 2.2 For Floppy Only Users ..............................3
  79.  
  80.           3  USING ICON286 .............................................4
  81.                 3.1 The Environment ....................................4
  82.                     3.1.1 Icon Pane ....................................5
  83.                     3.1.2 Status Pane ..................................5
  84.                     3.1.3 Editing Grid .................................5
  85.                     3.1.4 Tool Pane ....................................5
  86.                     3.1.5 Menu Bar .....................................6
  87.                           3.1.5.1 Quitting .............................6
  88.                           3.1.5.2 Saving Icons .........................6
  89.                           3.1.5.3 Loading Icons ........................6
  90.                           3.1.5.4 New ..................................7
  91.                           3.1.5.5 Getting Help .........................7
  92.                           3.1.5.6 Graphics Mode ........................7
  93.                           3.1.5.7 About ................................7
  94.  
  95.           4  USING THE PROGRAMMER'S LIBRARY ............................8
  96.                 4.1 An Introduction to Objects .........................8
  97.                 4.2 Getting Started with a Simple Program .............10
  98.                 4.3 Moving Up to the Mouse ............................12
  99.  
  100.           5  ICON286 Supplementary Tools and Other Programs ...........15
  101.                 5.1 ICON286 Library Manager ...........................15
  102.                     5.1.1 Using Libraries with Icon Tools .............15
  103.                     5.1.2 Making Libraries for Multiple Adapters ......16
  104.  
  105.                 5.2 Using CNVICON.EXE .................................16
  106.                 5.3 Making Animation Libraries ........................17
  107.                 5.4 TLIST the File Lister .............................17
  108.  
  109.           6  CLOSING NOTES/TECHNICAL STUFF ............................19
  110.                 6.1 Closing Notes .....................................19
  111.                 6.2 Future Notes ......................................19
  112.  
  113.  
  114.           Chapter 1 -- INTRODUCING ICON DRAW VERSION 1.0
  115.           
  116.                Welcome to ICON DRAW version 1.0, the graphical icon drawing
  117.           tool and programmer's library that allows Turbo Pascal 6.0
  118.           programmers to create and manipulate icons within their own GUIs. 
  119.           Note that this is NOT a Microsoft Windows product and the icons
  120.           and related programming libraries are incompatible with any
  121.           version of Microsoft Windows.  But you can write your own GUI
  122.           that utilizes the icons you create, and who knows?  Your product
  123.           may be the next rival of Microsoft Windows 3.0, giving them a run
  124.           for their money.
  125.            
  126.                ICON DRAW comes with two versions of the program, ICON88 and
  127.           ICON286.  Both are functionally the same, but ICON88 will work
  128.           with all machines, including slow PC's and XT's.  ICON286 will
  129.           work with AT compatible machines and better.  Also with ICON DRAW
  130.           is source code for ICONTOOLS, an object oriented library of
  131.           routines for manipulating icons that you create with ICON DRAW. 
  132.           There is also some example source code that shows you how to use
  133.           ICONTOOLS effectively in a Turbo Pascal 6.0 program.  And because
  134.           the library is object oriented, it's extensible, which means you
  135.           can create your own objects that will handle icons in whatever
  136.           kind of environment or program you're producing.
  137.           
  138.           1.2  Why Use Icon Draw?
  139.           
  140.                The reason that ICON DRAW was originally developed was to be
  141.           able to use icons in graphically oriented programs.  I was, at
  142.           one time during my naive days, trying to write my own version of
  143.           Microsoft Windows 2.01.  When I got only so far with the project,
  144.           and after basically burning myself out, I gave up the entire idea
  145.           completely and concentrated on different sorts of things.  But
  146.           when Microsoft came out with Windows 3.0 my interest in a
  147.           graphically oriented environment slowly took shape again.  I
  148.           liked Microsoft's whole knew look, especially the icons.  I
  149.           didn't necessarily have in mind writing a Windows-like
  150.           environment, but I wanted to have the tools so I'd be able write
  151.           simple GUIS for certain applications I had in mind, and since
  152.           graphics programming opens up a whole knew realm of potential, I
  153.           wanted to be able to have certain controlled functionality when
  154.           attempting a graphically oriented project.
  155.           
  156.                Finally, one cold day in my dormitory room, sneezing,
  157.           wheezing, and coughing from a terrible cold, ICON TOOLS and ICON
  158.           DRAW were born, and I was able to create programs that used
  159.           icons.  Unfortunately I only owned a Tandy 1000 sx computer and
  160.           didn't have the advantage of an EGA or VGA, so my graphics
  161.           programs weren't as snazzy as they could have been, but when
  162.           writing ICON DRAW and ICON TOOLS I had access, through some
  163.           friends and the school's computer room, to 286 and 386 based
  164.           computers with EGA and VGA monitors and was able to test ICON
  165.           DRAW and make wonderfully colorful, 3-D looking icons.  So, you
  166.           can do the same thing with whatever kind of graphics adapter you
  167.           have as long as it is capable of doing graphics (text-only
  168.           monochrome adapters will not work with this program.  If you have
  169.           monochrome then it should be a hercules compatible graphics
  170.           adapter).
  171.  
  172.                                  - 1 -
  173.           
  174.  
  175.           
  176.           1.3  What You Should Find
  177.           
  178.                You should find the following files with ICON DRAW:
  179.           
  180.                ICON88.EXE     - The 8088 version of ICON DRAW.
  181.                ICON286.EXE    - The 80286 version of ICON DRAW.
  182.                ILIB.EXE       - An Icon library manager.
  183.                TLIST.EXE      - File viewer (free of charge).
  184.                CNVICON.EXE    - Converts .ICS files to .ICN files for your
  185.                                 monitor.
  186.                ICONDRAW.DOC   - ICON DRAW manual.
  187.                REGISTER.DOC   - Registration form to be filled out and
  188.                                 returned to SofDesign Technology.
  189.                BUGSHEET.DOC   - Can be filled out and returned if you
  190.                                 discover any bugs you'd like to report.
  191.                PRODUCTS.TXT   - An updated list of products available
  192.                                 through SofDesign.
  193.                NEW.BAT        - Launches file viewer so you can view and    
  194.                                 print the new products listing.
  195.                README.BAT     - Launches file viewer so you can view and    
  196.                                 print the manual.
  197.                SOURCE.ZIP     - Various Pascal programs including
  198.                                 programmer's library source.
  199.                ALIEN.ZIP      - A simple alien space game using the icon
  200.                                 library routines.
  201.           
  202.                Files included with SOURCE.ZIP:
  203.           
  204.                TESTICON.PAS   - Sample program that loads 255 icons, then
  205.                                 rapidly displays and removes them in        
  206.                                 succession.
  207.                CNVICON.PAS    - The source for CNVICON.EXE.
  208.                GRAFINIT.PAS   - Include file useful for initializing
  209.                                 graphics adapters.
  210.                ANIMAT.PAS     - Sample program that demonstrates how you
  211.                                 can use an icon library as an animation
  212.                                 file.
  213.                DRAGICON.PAS   - Sample program that demonstrates dragging
  214.                                 an icon with the mouse.
  215.                MOUSE.PAS      - Source code for the mouse interface         
  216.                                 library.  This works with Microsoft         
  217.                                 Compatible mice.
  218.                MOUSE.TPU      - TPU format for MOUSE.PAS
  219.                ICONTOOL.PAS   - The object oriented programmer's library.
  220.                ICONTOOL.TPU   - TPU format for ICONTOOL.PAS.
  221.                
  222.           
  223.           
  224.           
  225.           1.4  What You Need in Order to Run Icon Draw
  226.           
  227.                To run ICON DRAW you will need any IBM PC/XT/AT compatible
  228.           computer with any kind of graphics adapter from Hercules to
  229.           standard VGA.  You will also need at least 512k of memory and a
  230.           Microsoft compatible mouse.  A hard disk is strongly recommended,
  231.           and you will need Turbo Pascal 6.0 or a compatible compiler to
  232.           use the programmer's library in order to use the icons you
  233.           create.
  234.                                  - 2 -
  235.           
  236.  
  237.           Chapter 2  --  INSTALLING ICON DRAW:
  238.           
  239.                 You can find ICON DRAW a number of ways, but the most
  240.           likely place is on a BBS.  If you have downloaded this from a BBS
  241.           then follow these instructions for preparing ICON DRAW to work
  242.           with what you have.  
  243.  
  244.           2.1  Hard Drive Owners
  245.           
  246.                I'm going to assume, or hope, that you have a hard drive,
  247.           and if you do, then you should create a subdirectory on your hard
  248.           drive calling it ICONDRAW (or whatever name suits your taste). 
  249.           Uncompress the ICON286 archive in whatever format it has been
  250.           archived under into the subdirectory you just created.
  251.           
  252.                You should have all the files that I have listed above.  In
  253.           case your archive is missing some of the files, please write us
  254.           here at SofDesign Technology, or call if you like, and we will
  255.           send you the necessary files that are missing.
  256.           
  257.                You can also unarchive the ALIEN.ZIP file and the SOURCE.ZIP
  258.           file and look at what you've got.  Both these archives will be
  259.           explained later.
  260.           
  261.           
  262.           2.2  For Floppy Only Users:
  263.           
  264.                If you have a floppy drive system, uncompress the files to a
  265.           freshly formatted disk.  Since Turbo Pascal 6.0 is recommended
  266.           for working on a hard drive, and in fact I think it needs to be
  267.           run from a hard drive, then there is little point in using this
  268.           product without a hard drive.  You can still use it, however, on
  269.           a floppy based system to create icons since icon source and
  270.           binary files take up little space.  You can then transport the
  271.           icon files to a system that has Turbo Pascal 6.0 on it and use
  272.           the icon binary files to include in any kind of graphics based
  273.           program you may be writing.
  274.  
  275.                                  - 3 -
  276.  
  277.           Chapter 3  --  USING ICON286
  278.           
  279.                For the remainder of the manual I will refer to ICON DRAW as
  280.           ICON286 since it was originally intended to run on my pitifully
  281.           slow Tandy 1000 sx with it's pitifully slow (though somewhat
  282.           faster) 286 accelerator card.  And since I needed all the speed I
  283.           could get, I relied on Turbo Pascal's 286 instruction set feature
  284.           to squeeze a little more speed out of my machine.
  285.           
  286.                First things first.  Once you've installed ICON286 onto your
  287.           system, then you're ready to begin.  If you have an old PC or an
  288.           XT, that is, if you have a computer with an 8088 or an 8086
  289.           microprocessor, then you need to run the ICON88.EXE program.  Any
  290.           other type of IBM compatible computer with an 80286 or higher
  291.           microprocessor can run the ICON286.EXE program.  
  292.           
  293.                There is nothing functionally different about the two
  294.           programs.  The ICON286 program, because it uses the 80286
  295.           instruction set, is slightly smaller and faster, which is the
  296.           advantage of having an AT or better computer.  
  297.           
  298.                When you have determined which one you need to run, then run
  299.           the program and take a look.  Make sure you have a Microsoft
  300.           compatible mouse since there is no way of using the icon draw
  301.           program without one.  All the push buttons are activated with the
  302.           mouse and the drawing grid works only with a mouse.
  303.           
  304.           
  305.           3.1 The Environment
  306.           
  307.                The ICON286 environment is set up with four window panes and
  308.           a set of push buttons on the bottom of the screen that act as a
  309.           menu.  The following is a representational diagram of the ICON286
  310.           environment:
  311.           
  312.           ┌──────────────┬───────────────────────────────────┬────────────┐
  313.           │   Icon       │                                   │   Tools    │
  314.           │              │                                   │            │
  315.           │              │                                   │ S B   C B  │
  316.           │              │                                   │ I u   O u  │
  317.           │              │                                   │ Z t   L t  │
  318.           │              │                                   │ E t   O t  │
  319.           │              │                                   │   o   R o  │
  320.           ├──────────────┤                                   │   n     n  │
  321.           │Grid: 30 x 25 │      Grid Area                    │   s     s  │
  322.           │X:            │                                   │            │
  323.           │Y:            │                                   │            │
  324.           │              │                                   │ S B        │
  325.           │Drawing Color │                                   │ H u        │
  326.           │┌────────────┐│                                   │ I t        │
  327.           ││            ││                                   │ F t        │
  328.           ││            ││                                   │ T o        │
  329.           │└────────────┘│                                   │   n        │
  330.           │Size Ratio: 1 │                                   │   s        │
  331.           │              │                                   │            │
  332.           └──────────────┴───────────────────────────────────┴────────────┘
  333.           ┌─────────────────────────────────────────────────────────┐ 
  334.           │ Quit  Save  Load  New  Help  Fill  Graphics Mode  About │
  335.           └─────────────────────────────────────────────────────────┘
  336.  
  337.                                  - 4 -
  338.  
  339.           3.1.1 Icon Pane:
  340.           
  341.                Pane 1 is the ICON window pane.  This pane will display the
  342.           icon as it's being drawn so you can see the progress of what's
  343.           happening and how it will look on your screen.  Because the Grid
  344.           is an approximation of the icon, it will sometimes look wider or
  345.           longer than the actual icon, depending on the grid size, so the
  346.           ICON pane was provided for convenience sake.
  347.           
  348.           
  349.           3.1.2 Status Pane:
  350.           
  351.                Pane 2, or the status pane, which is directly below the ICON
  352.           pane, contains status information about what's currently going on
  353.           in ICON286.  The GRID: indicator displays what the icons size
  354.           currently is.  30 x 25 is the default setting when first loading
  355.           ICON286.  When you create and save an icon in a particular grid
  356.           size, then ICON286 will load and size the grid automatically to
  357.           the saved icon's length and width.
  358.           
  359.                The X: and Y: indicators display where your mouse is on the
  360.           grid relative to the grid coordinates.
  361.           
  362.                The drawing color bar displays which drawing color is
  363.           currently in use by the program.
  364.           
  365.                The SIZE RATIO indicates how many blocks the grid will grow
  366.           or shrink when resizing the window with the SIZE PUSH BUTTONS. 
  367.           To set the size of the ration, 1 through 9, press whichever
  368.           number on your keyboard you wish the RATIO to be when sizing.
  369.                
  370.           
  371.           3.1.3  Editing Grid Pane:
  372.           
  373.                The third pane, the largest pane in the environment,
  374.           contains the drawing grid.  To draw within the grid, place the
  375.           mouse pointer on the grid where you want to start drawing,
  376.           depress the LEFT mouse button, and start moving.  The magnified
  377.           blocks will turn the color of the current drawing color.  To
  378.           erase a particular block or sequence of blocks, hold down the
  379.           RIGHT mouse button and begin drawing over the place you want
  380.           erased.  This has the same effect as choosing black as a drawing
  381.           color and drawing with it.
  382.           
  383.           
  384.           3.1.4  Tool Pane:
  385.           
  386.                The fourth pane contains various push button tools.  The
  387.           first set is the grid SIZE buttons.  You have four choices.  You
  388.           can shrink the size of the grid vertically with the UP ARROW
  389.           button, you can increase the size vertically with the DOWN ARROW
  390.           button, you can increase the size horizontally with the RIGHT
  391.           ARROW button and decrease the grid horizontally with the LEFT
  392.           ARROW button.  The grid will decrease or increase by the number
  393.           of blocks specified in the SIZE RATIO indicator in the status
  394.  
  395.                                  - 5 -
  396.  
  397.           window.
  398.           
  399.                The second set of push buttons is the SHIFT BUTTONS.  These
  400.           buttons will shift an image within the grid up, down, left or
  401.           right depending on which button you push (the arrows correspond
  402.           to the direction).  When an image reaches an edge, up, down, left
  403.           or right, it will simply wrap to the other side.  The grids
  404.           maximum capacity is 50 x 50, so when the image reaches 50 on the
  405.           right or on the bottom, part of it wraps around starting at one. 
  406.           If the grid is set to 30 x 25 and you shift your image left or
  407.           right, then the image will just go off the screen because it's
  408.           being shifted within the 50 x 50 grid.
  409.           
  410.                The color buttons allow you to select which drawing color
  411.           you want to use.  When you select a color, the DRAWING COLOR
  412.           block in the Status window changes accordingly. 
  413.           
  414.           
  415.           3.1.5  The Menu Bar:
  416.           
  417.                The menu bar across the bottom works the same way the other
  418.           buttons work.  But you can also choose the first letter of each
  419.           option via the keyboard and that function will be performed as if
  420.           you pushed the button with the mouse.
  421.           
  422.           
  423.           3.1.5.1  Quitting:
  424.           
  425.                The QUIT pushbutton needs no explanation.  But when you push
  426.           that button, you are asked if you really want to quit.  This is
  427.           obviously a safeguard from accidently choosing quit.
  428.           
  429.           
  430.           3.1.5.2  Saving Icons:
  431.           
  432.                The SAVE option lets you save the icon you're currently
  433.           creating or editing.  When pushed, a prompt appears asking you
  434.           for an eight letter name that is used by DOS.  Then a second
  435.           prompt appears asking you for an extended name which is saved
  436.           within the icon file.  The extended name can be used within your
  437.           applications and is explained later (see the Programming Library
  438.           chapter for more details).
  439.           
  440.                When you save an icon, ICON286 generates two files.  One is
  441.           an ICS file that contains the source for the icon that ICON286
  442.           loads and interprets.  The other file is an ICN bit mapped file
  443.           that the Pascal Library uses and that you will use when creating
  444.           applications with your icons.  ICON286 can't read the ICN files
  445.           directly, so make sure you don't lose the ICS source files or
  446.           else you won't be able to go back and edit your icons.
  447.           
  448.           
  449.           3.1.5.3  Loading Icons:
  450.           
  451.                Loading icons is similar to saving.  A prompt asks you for
  452.           the eight letter icon file name, and if it finds the appropriate
  453.           icon source file, it will load and display it so you can edit it.
  454.           
  455.                                  - 6 -
  456.  
  457.           3.1.5.4  New (Clearing the Work Space):
  458.           
  459.                Using the new option erases your work space and allows you
  460.           to begin again.  It saves the grid size you were currently
  461.           working with, so if you want a new grid size then you'll have to
  462.           size it manually.  I found, though, that when creating a library
  463.           of icons, I was usually using the same icon size.  Whenever I'd
  464.           push NEW, I'd want to keep the grid size I was previously working
  465.           with so I didn't have to keep sizing the grid to whatever I
  466.           desired.
  467.           
  468.           
  469.           3.1.5.5  Getting Help:
  470.           
  471.                There is a simple built-in help window that pops up when you
  472.           choose the help option.  It simply displays and briefly explains
  473.           what the different function are and what they do.  It also
  474.           explains what you can do with the mouse and what keys do what.
  475.           
  476.           
  477.           3.1.5.6  Graphics Mode:
  478.           
  479.                When this option is selected, a popup window appears
  480.           allowing you to choose, with a mouse, which graphics mode you'd
  481.           like to work in.  BE CAREFUL with this option.  If you don't
  482.           support a certain mode and go ahead and choose it anyway, then
  483.           your screen will go blank.  The program will still function
  484.           properly in most cases so all you'll need to do is press Q and Y
  485.           to quit the program.  This saves from having to reboot the
  486.           computer if you think your machine froze.  Some graphics modes
  487.           have extended options and another popup menu will appear
  488.           displaying what resolutions there are under a certain graphics
  489.           adapter.
  490.           
  491.                Pressing the mouse button OFF the menu will simply make the
  492.           menu go away.  This is in case you change your mind and don't
  493.           want to change the graphics mode.
  494.           
  495.           
  496.           3.1.5.7  About:
  497.           
  498.                This screen just displays a copyright notice with the
  499.           author's name (me) and the version number.  Pressing the LEFT
  500.           mouse button removes the message.
  501.  
  502.                                  - 7 -
  503.  
  504.           Chapter 4  --  USING THE PROGRAMMER'S LIBRARY
  505.           
  506.           
  507.           4.1  An Introduction to the Objects
  508.           
  509.                The programmer's library is a set of Turbo Pascal 6.0
  510.           objects for loading and manipulating icons created with ICON286.
  511.           I've provided all the source code, not just the object headers,
  512.           so you can see how I manipulate the icons and also to be able to
  513.           more effectively extend the objects to your taste.
  514.           
  515.                Here is the object source headers as I have defined them in
  516.           Turbo Pascal 6.0.  Study them, follow the next few section, and
  517.           soon you'll be writing your own icon based applications.
  518.           
  519.             icon = object
  520.               x,y        : integer;
  521.               theicon    : icon_record;
  522.               error      : boolean;
  523.               put_type   : word;
  524.               titleon    : boolean;
  525.               hidden     : boolean;
  526.               libheader  : header_type;
  527.               boundaries : icon_window;
  528.           
  529.               procedure init(iconlib:string; iconfile:string;               
  530.                              startx,starty: integer);
  531.               function  initerror:boolean;
  532.               function  inbounds(mx,my:integer):boolean;
  533.               function  is_hidden:boolean;
  534.               function  is_showing:boolean;
  535.               function  get_length:integer;
  536.               function  get_height:integer;
  537.               function  getx:integer;
  538.               function  gety:integer;
  539.               function  gettop:integer;
  540.               function  getleft:integer;
  541.               function  getbottom:integer;
  542.               function  getright:integer;
  543.               procedure setboundaries(x1,y1,x2,y2:integer);
  544.               procedure showicon;
  545.               procedure hideicon;
  546.               procedure icontitle(on:boolean);
  547.               procedure setput(put:word);
  548.               procedure setxy(newx,newy:integer);
  549.               procedure moveicon(newx,newy:integer);
  550.               procedure mousedragicon(onbutton:word);
  551.               procedure display_icon;
  552.               procedure disposeicon;
  553.               procedure done;
  554.             private
  555.               image_behind : pointer;
  556.               icon_image   : pointer;
  557.               title_image  : pointer;
  558.               size,
  559.               size_title_image : longint;
  560.               procedure get_rear_image;
  561.               procedure get_title_image;
  562.  
  563.                                  - 8 -
  564.  
  565.               procedure dispose_rear_image;
  566.               procedure dispose_title_image;
  567.             end;
  568.           
  569.             icon_manager = object(icon)
  570.               icons : array [1..500] of ^icon;
  571.               numicons : integer;
  572.               mboundaries : icon_window;
  573.           
  574.               procedure init(left,top,bottom,right:integer);
  575.               procedure addicon(iconlib:string; iconfile:string;            
  576.                                 startx,starty: integer; put:word;           
  577.                                 t:boolean);
  578.               function  initerror(i:integer):boolean;
  579.               function  inbounds(i:integer; mx,my:integer):boolean;
  580.               function  onwhichicon(mx,my:word):integer;
  581.               function  is_hidden(i:integer):boolean;
  582.               function  is_showing(i:integer):boolean;
  583.               function  get_length(i:integer):integer;
  584.               function  get_height(i:integer):integer;
  585.               function  getx(i:integer):integer;
  586.               function  gety(i:integer):integer;
  587.               function  gettop(i:integer):integer;
  588.               function  getleft(i:integer):integer;
  589.               function  getbottom(i:integer):integer;
  590.               function  getright(i:integer):integer;
  591.               function  currenticon:integer;
  592.               function  withinboundaries(mx,my:integer):boolean;
  593.               procedure setmanagerboundaries(x1,y1,x2,y2:integer);
  594.               procedure setboundaries(i,x1,y1,x2,y2:integer);
  595.               procedure showicon(i:integer);
  596.               procedure hideicon(i:integer);
  597.               procedure icontitle(i:integer; on:boolean);
  598.               procedure setput(i:integer; put:word);
  599.               procedure setxy(i:integer; newx,newy:integer);
  600.               procedure moveicon(i:integer; newx,newy:integer);
  601.               procedure mousedragicon(onbutton:word);
  602.               procedure display_icon(i:integer);
  603.               procedure disposeicon(i:integer);
  604.               procedure showallicons;
  605.               procedure hideallicons;
  606.               procedure disposeallicons;
  607.               procedure done;
  608.             end;
  609.           
  610.                There are two objects, one is the ICON object itself and the
  611.           other is an ICON MANAGER object that will manage up to 500 icons. 
  612.           Of course you can always declare more than one icon manager and
  613.           have even more icons and so on until you run out of memory.  
  614.           
  615.                The icon manager object is limited in what it can do, but
  616.           with some innovative programming, you can create an icon manager
  617.           that is event driven and that will effectively manage icons with
  618.           multiple overlapping and redrawing.  That's one of the wonderful
  619.           things about object oriented programming, the extensibility of it
  620.           all!
  621.           
  622.                                  - 9 -
  623.  
  624.           4.2 Getting Started with a Simple Program
  625.  
  626.                If you're unfamiliar with programming graphics in Turbo
  627.           Pascal, then you should read the sections in your manual that
  628.           deal with graphics programming.  
  629.           
  630.                There are two ways of using the graphics drivers that come
  631.           with Turbo Pascal.  One way is to keep the drivers and font files
  632.           in the directory that your executable application is in, but then
  633.           you have all the overhead of having extra files that could be lost
  634.           or damaged.  The second way is to run the MAKE program on the
  635.           BGILINK.PAS file.  This will create two files, BGIDRIV.TPU and
  636.           BGIFONT.TPU.  These can then be linked into your program, though
  637.           significantly adding to the size of your executable, but giving
  638.           the user you're creating the program for the flexibility to go from
  639.           one type of graphics adapter to another.  I'm going to show all my
  640.           demonstrations using the second technique because I think it's the
  641.           best way to go when creating graphics applications.
  642.           
  643.                I've included a Microsoft Compatible Mouse Driver unit,
  644.           source too, for use with programming your icons with a mouse. 
  645.           Since the library requires a mouse (though you can create an
  646.           object that will work with keyboard as well) I will keep to the
  647.           mouse format from here on.  If you have a different sort of mouse
  648.           and an appropriate interface library, or if you have another
  649.           library that you prefer, feel free to substitute it for mine.
  650.           
  651.                Let's begin with a small example of initializing your
  652.           adapter, declaring an icon, then displaying it on the screen. 
  653.           Assuming you have already created an icon, that is.  If you have
  654.           not, run ICON286 and have fun creating as many icons as you want. 
  655.           Then try out some of the example programs listed here and the
  656.           ones that come with ICON286.
  657.           
  658.                One more note.  I have included a small include file called
  659.           GRAFINIT.PAS.  I use this so I don't have to remember to type all
  660.           those laborious lines for initializing the drivers and
  661.           determining which type of adapter I have.  To use it simply
  662.           include it into your pascal file, then call the procedure
  663.           Grafinit whenever you want to initialize your screen in graphics
  664.           mode.
  665.           
  666.           Program ICON_TEST_ONE;
  667.           
  668.           uses 
  669.             (* use the crt unit, the driver unit, the graph unit and        
  670.                icontools *)
  671.             crt, bgidriv, graph, icontool; 
  672.           
  673.           var
  674.             anicon : icon; (* declare ANICON of the object type ICON *)
  675.           
  676.           {$I grafinit.pas}  (* include the handy screen initializer! *)
  677.           
  678.           begin
  679.             grafinit; (* initialize the graphics adapter, clearing the      
  680.                          screen *)
  681.           
  682.             (* read in the icon bit mapped image called MYICON, setting     
  683.  
  684.                                  - 10 -
  685.  
  686.                it's x and y coordinates at the center of the screen. *)
  687.             anicon.init('','MYICON.ICN',getmaxx div 2, getmaxy div 2);
  688.           
  689.             (* check to see if the file was found and the object            
  690.                initialized. *)
  691.             if anicon.initerror then
  692.             begin
  693.               closegraph;
  694.               restorecrtmode;
  695.               writeln('Uh oh! There was a problem loading the icon.');
  696.             end
  697.             else
  698.             begin
  699.               (* display the icon at the coordinates initially set *)
  700.               anicon.showicon;
  701.           
  702.               (* wait for a key to be pressed *)
  703.               repeat until keypressed;
  704.               anicon.hideicon;
  705.               anicon.disposeicon;
  706.             end;
  707.             (* all done *)
  708.             closegraph;
  709.             restorecrtmode;
  710.           end. 
  711.           
  712.           
  713.                Let's examine what I've done more closely.  First in my
  714.           program I included the BGIDRIV unit that you can create with
  715.           borland's BGILINK.PAS file.  Then I included borland's graph unit
  716.           because I needed sme of the functions within the unit, then I
  717.           included ICONTOOL so I could load and use an icon.
  718.           
  719.                The GRAFINIT file, as I explained earlier, is used for
  720.           convenience when initializing the graphics adapter.  You can look
  721.           at this file to get some hints about linking and using graphics
  722.           drivers.
  723.           
  724.                After calling GRAFINIT to initialize my monitor, I used icon
  725.           tool's init procedure to get the icon file from disk and
  726.           initialize it into memory.  Let's take a closer look at the
  727.           parameters.
  728.           
  729.                init(iconlib, iconfile : string; startx, starty : integer);
  730.           
  731.                The iconlib parameter, though not used in this
  732.           demonstration, can be used to open a library file created with
  733.           ILIB, explained later, and load the iconfile specified.  For now,
  734.           though, let's just work with individual icons.  The iconfile
  735.           parameter is a string which will consist of the icon file's name. 
  736.           ICON286 creates two files, and ICN file and ICS file.  Do not use
  737.           the ICS file when specifying an iconfile name because the
  738.           icontools works only with the bit mapped ICN files.  The ICS
  739.           files are source files and work only with ICON286.
  740.           
  741.                The starting X and Y positions are then declared before
  742.           moving on.  The next step is to check and see if the icon was
  743.           properly loaded and initialized.  The INITERROR function returns
  744.           a boolean value.  If the icon has not been loaded properly (which
  745.  
  746.                                  - 11 -
  747.  
  748.           can occur if the icon file specified did not exist) then a FALSE
  749.           is returned.  If the initerror function did return a false, then
  750.           the program closes the graphics adapter, returns to text mode and
  751.           displays and error message.
  752.           
  753.                If the icon was loaded properly then the SHOWICON procedure
  754.           will display the icon at the initially specified coordinates. 
  755.           Once the icon is displayed the program waits for a key to be
  756.           pressed before exiting the program.  Although hiding the icon and
  757.           then disposing its memory is unnecessary with such a simple
  758.           program, I included these procedure anyway to show you how you'd
  759.           clean up an icon when you were done with it.  For example, if you
  760.           have some sort of a graphical desktop program that uses ICONS
  761.           for, say, files, then if you were to delete a file, in essence
  762.           deleting the icon, you'd hide it, dispose of it's memory, then
  763.           delete the appropriate file that the icon represented.  
  764.           
  765.                If you had created an icon with a title, the title of the
  766.           icon should have showed up underneath the icon.  This is a
  767.           feature I included in case you wanted to write that desktop file
  768.           I mentioned.  Then the icon could have an associated filename, or
  769.           a long description underneath it.  You can turn off the title
  770.           before showing the icon with the following command:
  771.           
  772.                anicon.icontitle(false);
  773.           
  774.           
  775.           4.3  Moving Up to Mouse Support
  776.           
  777.                The following demonstration will show you how to load an
  778.           icon then drag it around with the mouse.  There is a more
  779.           complete example with this package called DRAGICON.PAS, and you
  780.           may want to compile and play with that one to get used to the
  781.           things you can do with ICONTOOLS and your mouse.
  782.           
  783.           Program DRAG_AN_ICON;
  784.           
  785.           uses
  786.             (* this time we include the mouse unit *)
  787.           
  788.             crt, mouse, bgidriv, graph, icontool;
  789.           
  790.           var
  791.             anicon : icon;
  792.           
  793.           {$I grafinit.pas }
  794.           
  795.           procedure main;
  796.           var
  797.             mx, my, mb : word;  (* variable for mouse actions *)
  798.           
  799.           begin
  800.             anicon.init('','MYICON.ICN',getmaxx div 2, getmaxy div 2);
  801.             (* has the icon loaded okay?  And is there a mouse? *)
  802.             if (anicon.initerror) and (not driverinstalled) then
  803.             begin
  804.               closegraph;
  805.               restorecrtmode;
  806.               writeln('Uh oh! There was a problem loading the icon or you   
  807.  
  808.                                  - 12 -
  809.  
  810.                        have no mouse to speak of.');
  811.             end
  812.             else
  813.             begin
  814.               anicon.setput(copyput);  (* set the way that icontools draws  
  815.                                           the object *)
  816.               anicon.icontitle(false);
  817.           
  818.               (* set the borders for where the icon can be dragged.  In     
  819.                  this case, the entire screen is used. *)
  820.               anicon.setboundaries(1,1,getmaxx,getmaxy); 
  821.               anicon.showicon;
  822.           
  823.               (* reset the mouse, initialize it's X and Y coordinates and   
  824.                  display the mouse pointer. *)
  825.               resetmouse;
  826.               setmouse(getmaxx div 2, getmaxy div 2);
  827.               showmouse;
  828.               repeat
  829.                 getmouse(mx,my,mb);  (* get the mouse information *)
  830.           
  831.                 (* has the first button been pressed? *)
  832.                 if mb=1 then
  833.           
  834.                   (* if so, check to see if mouse pointer is on the icon *)
  835.                   if anicon.inbounds(mx,my) then
  836.                   begin
  837.                     (* try a different drawing style *)
  838.                     anicon.setput(orput);
  839.                      (* drag the mouse using button 1 while button 1 is     
  840.                         pressed down *)
  841.                     anicon.mousedragicon(1);
  842.           
  843.                     (* this will restore the icons way of drawing back to   
  844.                        using copyput, but you must redraw the icon, like    
  845.                        such, in order to see its effect. *)
  846.                     hidemouse;
  847.                     anicon.hideicon;
  848.                     anicon.setput(copyput);
  849.                     anicon.showicon;
  850.                     showmouse;
  851.                   end;
  852.               until b=2; (* repeat until button 2 of mouse is pressed *) 
  853.               mouse.hideicon;
  854.               mouse.disposeicon;
  855.               closegraph;
  856.               restorecrtmode;
  857.             end;
  858.               
  859.           end;
  860.           
  861.           
  862.           begin
  863.             grafinit;
  864.             main;     (* I like to include a main procedure for my main     
  865.                          processing block of code *)
  866.           end.
  867.           
  868.                                  - 13 -
  869.  
  870.                DRAG_AN_ICON is a simple program that shows you how to setup
  871.           an icon and its physical boundaries in order to drag it around
  872.           the screen within the boundaries.  My personal preference is to
  873.           use a MAIN procedure called from the initial BEGIN...END. block.
  874.           This is a good technique in order to minimize global variables. 
  875.           I do all my graphics initialization and other initialization in
  876.           the BEGIN..END. block, then I call procedure MAIN to handle the
  877.           dirty work.
  878.           
  879.                A close look reveals pretty much the same way of setting up
  880.           the environment.  I used grafinit and initialized an icon,
  881.           checking to see if it had been properly initialized.  I also
  882.           check to see if a mouse driver is loaded because there's no point
  883.           in dragging an icon with a mouse if there is no mouse.  Then I
  884.           used a few new procedures.  First of all I set the way that the
  885.           object is drawn on the screen (this is also covered in your Turbo
  886.           Pascal manuals).  I used COPYPUT, but there are a number of
  887.           choices.  You could have used any one of the following:
  888.           
  889.                COPYPUT
  890.                XORPUT
  891.                ORPUT
  892.                ANDPUT
  893.                NOTPUT
  894.           
  895.           An experiment:  To see what each one of these drawing types does,
  896.           try placing some different colored and textured boxes on the
  897.           screen in various places with Turbo Pascal's BAR procedure, then
  898.           initialize your icon and drag it around the screen, observing
  899.           what the icon does.  
  900.           
  901.                Once the drawing technique is set, I tell the object to not
  902.           include the title when using the icon.  I then set the boundaries
  903.           with the SETBOUNDARIES(startx, starty, endx, endy) procedure. 
  904.           This tells the object to not drag the icon past any one of these
  905.           boundary points.  This is useful when you want to create a
  906.           widowed type environment and you want the icons to stay within
  907.           the boundaries of a window.
  908.           
  909.                Once the boundaries have been set, I display the icon, then
  910.           initialize the mouse and display it on the screen where the icon
  911.           is.  Within the Repeat Until loop the mouse is poled for
  912.           activity, then the MB variable, which holds the button status, 
  913.           is checked.  If button one has been pressed, then the mouse's
  914.           position is checked (using the INBOUNDS procedure) to see if it
  915.           is within the bounds of the icon.  If it is, then I set the
  916.           mouses drawing style to ORPUT and call the MOUSEDRAGICON routine
  917.           with the button number, in this case 1.  This procedure takes
  918.           care of the dragging until the button is let go.  Once the button
  919.           has been let go, MOUSEDRAGICON places the icon on its new
  920.           location, then I reset the drawing method to COPYPUT by hiding
  921.           the icon, resetting it's drawing method, then redisplaying the
  922.           icon.
  923.           
  924.                When button 2 is pressed the program cleans up the icon
  925.           memory (again unnecessary, but good practice) and closes the
  926.           graphics adapter, restoring the crt mode.
  927.           
  928.                                  - 14 -
  929.  
  930.           Chapter 5  --  ICON286 Supplementary Tools and Other Programs:
  931.           
  932.           
  933.           5.1 ICON286 Library Manager
  934.           
  935.                The library manager maintains icons that you create with
  936.           ICON286 in a single, unified library, that can be accessed
  937.           through ICONTOOLS.
  938.           
  939.                The library manager is a command line program run from dos
  940.           that allows you to create and add icons to a library, extract
  941.           icons from a library and remove icons from a library.  There's
  942.           also a list feature that will display a directory of the icons
  943.           within the library.
  944.           
  945.           ILIB usage diagram:
  946.           
  947.                ILIB [command] [library name] [icon files]
  948.           
  949.           ILIB example:
  950.                     
  951.                ILIB -a icon<.lib> icon1<.icn>+icon2<.icn>+. . . iconN<.icn>
  952.           
  953.           These are the command line invocations:
  954.           
  955.                -a         Add icons to library (this also creates the       
  956.                           library if it has not already been created).
  957.                -d         Deletes icons from the library
  958.                -v, -l     Either of these will produce a directory listing
  959.                -e         Extracts icons from the library
  960.                -x         Extracts and then deletes the icons from the
  961.                           library
  962.           
  963.                When specifying the icon library name or the actual icons,
  964.           the extensions are unnecessary.  Since all icons created with
  965.           ICON286 are named with the .ICN extension, and since ILIB gives
  966.           the .LIB extension to all libraries, you can omit the extensions. 
  967.           They're used in this manual for the sake of clarity.
  968.           
  969.           
  970.           
  971.           5.1.1  Using Libraries with ICONTOOLS
  972.           
  973.                Libraries are good to have when managing a program that uses
  974.           lots of different icons.  When you develop an application that
  975.           uses the icons you have created, you'll probably want some way of
  976.           managing the icons within your directory.  Having fifty different
  977.           icon files in a directory is unprofessional looking at best, so a
  978.           good way to organize your icons is within a single, unified and
  979.           manageable file called a library.  
  980.           
  981.                The ICON object and the ICON MANAGER object have been
  982.           written to initialize icons either as ICN files or icons within
  983.           LIB files.  When loading an ICN file, the init procedure just
  984.           looks for the appropriate icon file and loads it into memory. 
  985.           But if a library is specified within the init procedure,
  986.           ICONTOOLS opens the library file, searches for the icon file
  987.           specified, and, if it is found, it extracts it from the library
  988.  
  989.                                  - 15 -
  990.  
  991.           and into memory.  Using either a library or a single icon file
  992.           will remain transparent to you when developing and to the user
  993.           when using.  Because the ICONTOOLS objects take care of all the
  994.           low-level dirty work, you won't have to bother with how a library
  995.           is set up.  All you'll have to do is specify whether or not the
  996.           icon is in a library, which library it's in and what the icon
  997.           file is called.  ICONTOOLS will do all the rest!
  998.           
  999.           
  1000.           5.1.2  Making Libraries for Multiple Video Adapters
  1001.           
  1002.                When developing programs that make use of more than one type
  1003.           of display adapter, multiple libraries can be used with icons
  1004.           that are created in different resolutions.  For example, if you
  1005.           were to write some king of shoot-em-up alien space game, you
  1006.           could create a bunch of icons such as  ships, aliens, missiles
  1007.           and explosions.  Then you could save them in a library and call
  1008.           it GRAFDATA.LIB.  But if you were going to write a game that
  1009.           allowed the user of the game to use his or her monitor to its
  1010.           maximum resolution and color, then you could, if you had, a VGA,
  1011.           load the icon source files in different graphics modes and save
  1012.           them again thus creating ICN files for that particular mode and
  1013.           resolution.  You could then create a library called CGADATA.LIB. 
  1014.           You could do a library for each type of monitor, i.e.
  1015.           EGADATA.LIB, VGADATA.LIB, HERCDATA.LIB, then in your program you
  1016.           could load the appropriate library according the graphics adapter
  1017.           the person has in his system.
  1018.           
  1019.           
  1020.           5.2  Using CNVICON.EXE
  1021.           
  1022.                CNVICON.EXE will convert ICS files to ICN files for the
  1023.           highest resolution that the video adapter in the current computer
  1024.           is capable of.  For example; In my ALIEN game that I have
  1025.           created, I include all the ICS files.  Before you run the game
  1026.           your are told, in the accompanying documentation, to run the
  1027.           CONVERT batch file.  All this does is load all the ICS files, one
  1028.           at a time, and creates ICN files in your highest resolution. 
  1029.           Then you can play the game once the ICN files have been created.
  1030.           
  1031.                You can use wildcard parameters with CNVICON when converting
  1032.           ICS files.  For example:
  1033.           
  1034.                CNVICON *.ICS 
  1035.           
  1036.           will convert all the ICS files in a subdirectory to their
  1037.           appropriate ICN files.  
  1038.           
  1039.                CNVICON ALIEN*.ICS
  1040.           
  1041.           will convert all the ALIEN source files to ALIEN bit mapped icon
  1042.           files.
  1043.           
  1044.                You can have a batch file that automates, for the user, a
  1045.           way of setting up icons for his system and storing them in a
  1046.           library.  In case you don't have the convenience of a VGA for
  1047.           creating separate distribution Libraries, you could supply the
  1048.           source files and a SETUP batch file that converts all the
  1049.           necessary icon source files to their bit mapped components,
  1050.  
  1051.                                  - 16 -
  1052.  
  1053.           creates a library of the ICN files, then deletes the ICN files. 
  1054.           It wouldn't be the most professional way, but it would be
  1055.           convenient and a one-time-only thing.  Once the library for the
  1056.           particular user is created, he need only run the application.
  1057.           
  1058.           
  1059.           5.3  Make Animation Libraries
  1060.           
  1061.                Because icon libraries are just a sequence of icons, you
  1062.           could draw a sequence of frames of, say, a stick man walking. 
  1063.           You could call each frame MAN#, where # is an actual number. 
  1064.           Then you could save each of those icons to a library, use the
  1065.           library manager to load the entire library, then display each
  1066.           icon in sequence giving the appearance of a man walking along the
  1067.           screen.
  1068.           
  1069.                ANIMAT.PAS is a program that will test an animation library
  1070.           if you decide to create one.  Check out the source to see how I
  1071.           did it, then create some kind of animation library and run it
  1072.           with ANIMAT.  There's all kinds of possibilities with simple
  1073.           animation.  The ALIEN game that I have included works with
  1074.           animation.  Whenever you or the alien gets hit with a missile, a
  1075.           sequence of frames depict the explosion presenting the illusion
  1076.           of either the ship or the alien being destroyed.  I used only a
  1077.           few frames to make simple explosions, but you can get as detailed
  1078.           as you'd like.  Remember, once the icons are loaded, there's no
  1079.           more going back to slow disk accesses.  Using animation sequences
  1080.           is all done from memory, so the appearance of animation should be
  1081.           fast.  In fact you might have to add a delay in order to see
  1082.           what's happening.
  1083.           
  1084.           
  1085.           5.4  TLIST the File Lister
  1086.           
  1087.                In case you were wondering about this little program and if
  1088.           it costs anything, don't wonder any longer.  I include TLIST with
  1089.           all my software so users of my software can browse the
  1090.           accompanying documentation on-line, and even print it when ready. 
  1091.           I created this program with an early version of Turbo Pascal
  1092.           (after 3 since it is an EXE file) and have used it ever since. 
  1093.           It's yours to keep and if you find it useful then by all means
  1094.           use it.  And pass it around to anyone else who might want to use
  1095.           it.
  1096.           
  1097.                There are no search facilities or any of the other niceties
  1098.           that some of those more advanced file viewers contain, but it's
  1099.           good enough to view straight ASCII files.  You can scroll up and
  1100.           down as well as left and right.  You can advance straight to the
  1101.           top or go down to the bottom.  And you can use the print service
  1102.           to print the file.  TLIST is a memory only file viewer.  That is,
  1103.           once the file exceeds the memory limit of your system, then there
  1104.           will be no more room to view the rest.  At this point TLIST asks
  1105.           you if you still want to view the file despite the fact that it
  1106.           couldn't load the entire file.  I find that all my documentation
  1107.           as well as most other documentation from other shareware packages
  1108.           fits neatly into 640K, so I have little problem loading an
  1109.           viewing files.
  1110.           
  1111.                                  - 17 -
  1112.  
  1113.                If TLIST should cause your system to crash for any reason,
  1114.           then please notify me.  I've been testing it for years and there
  1115.           has been no indication of it crashing systems or destroying
  1116.           files, but in case something weird happens to you while using it,
  1117.           don't hesitate in letting me know.
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.                                  - 18 -
  1173.  
  1174.           Chapter 6 -- CLOSING NOTES/TECHNICAL STUFF
  1175.           
  1176.           6.1  Closing Notes
  1177.  
  1178.                I hope that this program benefits you in some way.  If it
  1179.           does, and if you use it to create programs that are freeware,
  1180.           shareware or commercial, I would appreciate you taking the time
  1181.           to fill out the user registration form and to send in a check or
  1182.           money order to SofDesign's address above.  I ask a fee of $49.95
  1183.           which I think is a modest sum for both an editor, programming
  1184.           tools and source code.  The registration fee is also an incentive
  1185.           for me to keep refining and adding to ICONDRAW and ICONTOOLS, and
  1186.           also to keep refining this documentation.  
  1187.           
  1188.                Any questions, comments or suggestions can be directed to
  1189.           me, Tom Clancy, at SofDesign Technology.  The address and phone
  1190.           number are stated here:
  1191.           
  1192.                SofDesign Technology
  1193.                C/O Tom Clancy
  1194.                58 North Dillon St.
  1195.                Titusville, PA 16354-2406
  1196.           
  1197.                Phone Number: (814) 827-2306
  1198.           
  1199.           
  1200.           6.2  Future Notes
  1201.           
  1202.                This is only the first version of this software, but I hope
  1203.           to keep programming and refining it and, with your help and
  1204.           suggestions, adding features that make using icons easier.  I am
  1205.           planning to refine the ICONDRAW interface as soon as I get a
  1206.           computer with VGA graphics and a much faster processor.  Not that
  1207.           the processor will make any difference to the look of the
  1208.           product, but it will sure cut down the time between compilations. 
  1209.           
  1210.                Because there seems to be so many C++ programmers out there
  1211.           these days, I'm plannning a C++ set of ICON TOOLS for them, and I
  1212.           might create the new ICON DRAW interface in Borland's C++.  I
  1213.           love Turbo Pascal and all it can do with objects, but C++, I
  1214.           find, is more flexible and faster in some cases.  So if you like
  1215.           this program and are considering a move to C++, don't worry.  I
  1216.           will have ICONDRAW compatible C++ libraries out soon.
  1217.           
  1218.                As far as the libraries are concerened, I plan to extend
  1219.           them even more, adding an event driven desktop that will allow
  1220.           you to mix icons and graphical windows as well as dialogue boxes
  1221.           and user prompts.  I'm going to eventually combine all my tools
  1222.           into one set of graphical programming tools for both Turbo Pascal
  1223.           and Turbo C++.
  1224.  
  1225.                                  - 19 -
  1226.  
  1227.